﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using BE;
using BE.SearchCriteria;

namespace DAL
{
    public class CampañasZonasCierresDAL : BaseDAL
    {
        public CampañasZonasCierresBE SeleccionarPorZona(CampañasZonasCierresBE oCampañasZonasCierresBE)
        {
            CampañasZonasCierresBE oCampañasZonasCierres = null;
            using (SqlConnection cnn = new SqlConnection(GetConnectionString()))
            {
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = cnn;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(new SqlParameter("@IdZona", oCampañasZonasCierresBE.oZonasBE.IdZona));
                cmd.CommandText = "CampañasZonasCierres_GetByZona";
                cnn.Open();
                SqlDataReader reader = null;
                reader = cmd.ExecuteReader();

                if (reader.HasRows)
                {
                    Int32 idCampañasIndex = reader.GetOrdinal("IdCampaña");
                    Int32 descripcionIndex = reader.GetOrdinal("Descripcion");
                    Int32 idZonaIndex = reader.GetOrdinal("IdZona");
                    Int32 fechaInicioIndex = reader.GetOrdinal("Fechainicio");
                    Int32 fechaCierreIndex = reader.GetOrdinal("FechaCierre");
                    Int32 fechaLlegadaIndex = reader.GetOrdinal("FechaLlegada");
                    
                    while (reader.Read())
                    {
                        oCampañasZonasCierres = new CampañasZonasCierresBE();
                        oCampañasZonasCierres.oCampañaBE = new CampañaBE();
                        oCampañasZonasCierres.oZonasBE = new ZonasBE();

                        Object[] values = new Object[reader.FieldCount];
                        reader.GetValues(values);

                        oCampañasZonasCierres.oCampañaBE.IdCampaña   = Convert.ToInt32(values[idCampañasIndex]);
                        oCampañasZonasCierres.oCampañaBE.Descripcion = Convert.ToString(values[descripcionIndex]);
                        oCampañasZonasCierres.oZonasBE.IdZona = Convert.ToInt32(values[idZonaIndex]);
                        oCampañasZonasCierres.FechaInicio = Convert.ToDateTime(values[fechaInicioIndex]);
                        oCampañasZonasCierres.FechaCierre = Convert.ToDateTime(values[fechaCierreIndex]);
                        oCampañasZonasCierres.FechaLlegada = values[fechaLlegadaIndex ]!= System.DBNull.Value ? (DateTime?) values[fechaLlegadaIndex]: null;
                    }
                }

            }
            return oCampañasZonasCierres;
        }

        public List<CampañasZonasCierresBE> SeleccionarPorIdCampaña(int pIdCampaña)
        {
            List<CampañasZonasCierresBE> oCampañasZonasCierresList = new List<CampañasZonasCierresBE>();
            using (SqlConnection cnn = new SqlConnection(GetConnectionString()))
            {
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = cnn;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(new SqlParameter("@IdCampaña", pIdCampaña));
                cmd.CommandText = "CampañasZonasCierres_GetByIdCampaña";
                cnn.Open();
                SqlDataReader reader = null;
                reader = cmd.ExecuteReader();

                if (reader.HasRows)
                {
                    while (reader.Read())
                    {
                        CampañasZonasCierresBE oCampañasZonasCierres = Construir(reader);
                        oCampañasZonasCierresList.Add(oCampañasZonasCierres);
                    }
                }

            }
            return oCampañasZonasCierresList;
        }

        private CampañasZonasCierresBE Construir(SqlDataReader reader)
        {
            CampañasZonasCierresBE oCampañasZonasCierre = new CampañasZonasCierresBE();
            oCampañasZonasCierre.oCampañaBE = new CampañaBE();
            oCampañasZonasCierre.oZonasBE = new ZonasBE();

            oCampañasZonasCierre.oCampañaBE.IdCampaña = Convert.ToInt32(reader["IdCampaña"]);            
            oCampañasZonasCierre.oZonasBE.IdZona = Convert.ToInt32(reader["IdZona"]);
            oCampañasZonasCierre.oZonasBE.Descripcion = reader["Zona"].ToString();
            oCampañasZonasCierre.FechaInicio = reader["FechaInicio"] != System.DBNull.Value ? (DateTime?)reader["FechaInicio"] : null;
            oCampañasZonasCierre.FechaCierre = reader["FechaCierre"] != System.DBNull.Value ? (DateTime?)reader["FechaCierre"] : null;
            oCampañasZonasCierre.FechaLlegada = reader["FechaLlegada"] != System.DBNull.Value ? (DateTime?)reader["FechaLlegada"] : null;

            return oCampañasZonasCierre;
        }

        public void InsertarBatch(List<CampañasZonasCierresBE> pListElemBE)
        {
            using (SqlConnection cnn = new SqlConnection(GetConnectionString()))
            {
                try
                {
                    cnn.Open();

                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = cnn;
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = "CampañasZonasCierres_i";

                    SqlParameter oParamIdCampaña = cmd.Parameters.Add(new SqlParameter("@IdCampaña", SqlDbType.Int));
                    SqlParameter oParamIdZona = cmd.Parameters.Add(new SqlParameter("@IdZona", SqlDbType.Int));                    
                    SqlParameter oParamFechaInicio = cmd.Parameters.Add(new SqlParameter("@FechaInicio", SqlDbType.DateTime));
                    SqlParameter oParamFechaCierre= cmd.Parameters.Add(new SqlParameter("@FechaCierre", SqlDbType.DateTime));
                    SqlParameter oParamFechaLlegada = cmd.Parameters.Add(new SqlParameter("@FechaLlegada", SqlDbType.DateTime));

                    foreach (var oCampañasZonasCierres in pListElemBE)
                    {
                        oParamIdCampaña.Value = oCampañasZonasCierres.oCampañaBE.IdCampaña;
                        oParamIdZona.Value = oCampañasZonasCierres.IdZona;
                        oParamFechaInicio.Value = oCampañasZonasCierres.FechaInicio;
                        oParamFechaCierre.Value = oCampañasZonasCierres.FechaCierre;
                        oParamFechaLlegada.Value = oCampañasZonasCierres.FechaLlegada;

                        cmd.ExecuteNonQuery();
                    }
                }
                catch (Exception)
                {
                    throw;
                }

            }
        }

        public void DeleteByIdIdCampaña(int pIdCampaña)
        {
            try
            {
                using (SqlConnection cnn = new SqlConnection(GetConnectionString()))
                {
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = cnn;
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = "CampañasZonasCierres_d_ByIdCampaña";
                    cmd.Parameters.Add(new SqlParameter("@IdCampaña", pIdCampaña));
                    cnn.Open();
                    cmd.ExecuteNonQuery();
                }
            }
            catch (Exception)
            { throw; }

        }

        public List<CampañasZonasCierresBE> SeleccionarPorZonaCampaña(CampañasZonasCierresBE oCampañasZonasCierresBE)
        {
            List<CampañasZonasCierresBE> oCampañasZonasCierresList = new List<CampañasZonasCierresBE>();
            using (SqlConnection cnn = new SqlConnection(GetConnectionString()))
            {
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = cnn;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(new SqlParameter("@IdZona", oCampañasZonasCierresBE.oZonasBE.IdZona));
                cmd.Parameters.Add(new SqlParameter("@Cerrado", oCampañasZonasCierresBE.oCampañaBE.Cerrado));
                cmd.CommandText = "CampañasZonasCierres_GetByZonaCampaña";
                cnn.Open();
                SqlDataReader reader = null;
                reader = cmd.ExecuteReader();

                if (reader.HasRows)
                {
                    while (reader.Read())
                    {
                        CampañasZonasCierresBE oCampañasZonasCierre = new CampañasZonasCierresBE();
                        oCampañasZonasCierre.oCampañaBE = new CampañaBE();
                        oCampañasZonasCierre.oZonasBE = new ZonasBE();

                        oCampañasZonasCierre.oCampañaBE.IdCampaña = Convert.ToInt32(reader["IdCampaña"]);
                        oCampañasZonasCierre.oCampañaBE.Descripcion = reader["Descripcion"].ToString();
                        oCampañasZonasCierre.oZonasBE.IdZona = Convert.ToInt32(reader["IdZona"]);
                        oCampañasZonasCierre.FechaInicio = reader["FechaInicio"] != System.DBNull.Value ? (DateTime?)reader["FechaInicio"] : null;
                        oCampañasZonasCierre.FechaCierre = reader["FechaCierre"] != System.DBNull.Value ? (DateTime?)reader["FechaCierre"] : null;
                        oCampañasZonasCierre.FechaLlegada = reader["FechaLlegada"] != System.DBNull.Value ? (DateTime?)reader["FechaLlegada"] : null;

                        oCampañasZonasCierresList.Add(oCampañasZonasCierre);
                    }
                }
            }

           return oCampañasZonasCierresList;
        }

         
    }
}
